Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit aeceb30d67ef2ff9ebf411a73daaab18438c5113


Parents : 56665dd
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-05-03T21:10:29-05:00

fix(config): enable nomad_micron_wasm in configuration and UI settings

Changes
Diff

diff --git a/meshchatx/meshchat.py b/meshchatx/meshchat.py
index 01d23cee..86e752bf 100644
--- a/meshchatx/meshchat.py
+++ b/meshchatx/meshchat.py
@@ -13110,6 +13110,15 @@ class ReticulumMeshChat:
self.config.nomad_micron_wasm_enabled.set(
self._parse_bool(data["nomad_micron_wasm_enabled"]),
)
+ if not self.config.nomad_micron_wasm_enabled.get():
+ self.config.nomad_micron_default_engine.set("js")
+
+ if "nomad_micron_default_engine" in data:
+ if self.config.nomad_micron_wasm_enabled.get():
+ raw = str(data["nomad_micron_default_engine"] or "").strip().lower()
+ self.config.nomad_micron_default_engine.set(
+ "wasm" if raw == "wasm" else "js"
+ )
if "nomad_default_page_path" in data:
from meshchatx.src.backend.page_node import is_allowed_page_filename
@@ -14592,6 +14601,8 @@ class ReticulumMeshChat:
"nomad_render_html_enabled": ctx.config.nomad_render_html_enabled.get(),
"nomad_render_plaintext_enabled": ctx.config.nomad_render_plaintext_enabled.get(),
"nomad_micron_wasm_enabled": ctx.config.nomad_micron_wasm_enabled.get(),
+ "nomad_micron_default_engine": ctx.config.nomad_micron_default_engine.get()
+ or "js",
"nomad_default_page_path": ctx.config.nomad_default_page_path.get(),
"local_message_auto_delete_enabled": ctx.config.local_message_auto_delete_enabled.get(),
"local_message_auto_delete_value": ctx.config.local_message_auto_delete_value.get(),

diff --git a/meshchatx/src/backend/config_manager.py b/meshchatx/src/backend/config_manager.py
index d1f595c6..23b1a772 100644
--- a/meshchatx/src/backend/config_manager.py
+++ b/meshchatx/src/backend/config_manager.py
@@ -463,7 +463,12 @@ class ConfigManager:
self.nomad_micron_wasm_enabled = self.BoolConfig(
self,
"nomad_micron_wasm_enabled",
- False,
+ True,
+ )
+ self.nomad_micron_default_engine = self.StringConfig(
+ self,
+ "nomad_micron_default_engine",
+ "js",
)
self.nomad_default_page_path = self.StringConfig(
self,

diff --git a/meshchatx/src/frontend/components/archives/ArchivesPage.vue b/meshchatx/src/frontend/components/archives/ArchivesPage.vue
index 043fc361..e8b69043 100644
--- a/meshchatx/src/frontend/components/archives/ArchivesPage.vue
+++ b/meshchatx/src/frontend/components/archives/ArchivesPage.vue
@@ -273,21 +273,25 @@ export default {
return isMicronWasmBundled() && (GlobalState.config || {}).nomad_micron_wasm_enabled === true;
},
nomadMicronWasmActive() {
+ const engineWasm = (GlobalState.config?.nomad_micron_default_engine || "js") === "wasm";
return (
this.nomadMicronWasmFeatureEffective &&
this.nomadMicronWasmReady === true &&
- typeof globalThis.micronConvert === "function"
+ typeof globalThis.micronConvert === "function" &&
+ engineWasm
);
},
nomadRenderOptions() {
const c = GlobalState.config || {};
const hash = this.viewingArchive?.destination_hash || null;
+ const engineWasm = (c.nomad_micron_default_engine || "js") === "wasm";
return {
renderMarkdown: c.nomad_render_markdown_enabled !== false,
renderHtml: c.nomad_render_html_enabled !== false,
renderPlaintext: c.nomad_render_plaintext_enabled !== false,
nomadDestinationHash: hash,
- nomad_micron_wasm_use: this.nomadMicronWasmFeatureEffective && this.nomadMicronWasmReady === true,
+ nomad_micron_wasm_use:
+ this.nomadMicronWasmFeatureEffective && this.nomadMicronWasmReady === true && engineWasm,
};
},
selectedNode() {
@@ -391,6 +395,16 @@ export default {
}
);
+ this.$watch(
+ () => GlobalState.config?.nomad_micron_default_engine,
+ () => {
+ const a = this.viewingArchive;
+ if (a) {
+ this.renderedContent = this.renderFullContent(a);
+ }
+ }
+ );
+
if (isMicronWasmBundled() && GlobalState.config?.nomad_micron_wasm_enabled === true) {
preloadNomadMicronWasm().then((ok) => {
this.nomadMicronWasmReady = ok === true;

diff --git a/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue b/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue
index fe816c78..57fecb86 100644
--- a/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue
+++ b/meshchatx/src/frontend/components/nomadnetwork/NomadNetworkPage.vue
@@ -163,14 +163,15 @@
<button
class="flex-1 rounded px-2 py-1 text-[10px] font-bold transition-colors"
:class="
- !GlobalState.config.nomad_micron_wasm_enabled
+ (GlobalState.config.nomad_micron_default_engine || 'js') === 'js'
? 'bg-blue-600 text-white dark:bg-blue-500'
: 'bg-[var(--mc-surface-hover)] text-[var(--mc-text-secondary)] hover:bg-[var(--mc-border-strong)]'
"
+ :disabled="!GlobalState.config.nomad_micron_wasm_enabled"
@click.stop="
- !GlobalState.config.nomad_micron_wasm_enabled
+ (GlobalState.config.nomad_micron_default_engine || 'js') === 'js'
? null
- : toggleMicronWasm()
+ : applyNomadMicronDefaultEngine('js')
"
>
JS
@@ -178,12 +179,15 @@
<button
class="flex-1 rounded px-2 py-1 text-[10px] font-bold transition-colors"
:class="
- GlobalState.config.nomad_micron_wasm_enabled
+ (GlobalState.config.nomad_micron_default_engine || 'js') === 'wasm'
? 'bg-blue-600 text-white dark:bg-blue-500'
: 'bg-[var(--mc-surface-hover)] text-[var(--mc-text-secondary)] hover:bg-[var(--mc-border-strong)]'
"
+ :disabled="!GlobalState.config.nomad_micron_wasm_enabled"
@click.stop="
- GlobalState.config.nomad_micron_wasm_enabled ? null : toggleMicronWasm()
+ (GlobalState.config.nomad_micron_default_engine || 'js') === 'wasm'
+ ? null
+ : applyNomadMicronDefaultEngine('wasm')
"
>
WASM
@@ -292,14 +296,14 @@
</DropDownMenuItem>
<DropDownMenuItem
v-if="showMicronRendererInMobileMenu"
- @click="applyNomadMicronWasmEnabled(false)"
+ @click="applyNomadMicronDefaultEngine('js')"
>
<MaterialDesignIcon icon-name="language-javascript" class="size-5" />
<span>{{ $t("nomadnet.renderer_menu_js") }}</span>
</DropDownMenuItem>
<DropDownMenuItem
v-if="showMicronRendererInMobileMenu"
- @click="applyNomadMicronWasmEnabled(true)"
+ @click="applyNomadMicronDefaultEngine('wasm')"
>
<MaterialDesignIcon icon-name="memory" class="size-5" />
<span>{{ $t("nomadnet.renderer_menu_wasm") }}</span>
@@ -677,20 +681,24 @@ export default {
return "https://git.quad4.io/Go-Libs/micron-parser-go";
},
nomadMicronWasmActive() {
+ const engineWasm = (GlobalState.config?.nomad_micron_default_engine || "js") === "wasm";
return (
this.nomadMicronWasmFeatureEffective &&
this.nomadMicronWasmReady === true &&
- typeof globalThis.micronConvert === "function"
+ typeof globalThis.micronConvert === "function" &&
+ engineWasm
);
},
nomadRenderOptions() {
const c = GlobalState.config || {};
+ const engineWasm = (c.nomad_micron_default_engine || "js") === "wasm";
return {
renderMarkdown: c.nomad_render_markdown_enabled !== false,
renderHtml: c.nomad_render_html_enabled !== false,
renderPlaintext: c.nomad_render_plaintext_enabled !== false,
nomadDestinationHash: this.selectedNode?.destination_hash || null,
- nomad_micron_wasm_use: this.nomadMicronWasmFeatureEffective && this.nomadMicronWasmReady === true,
+ nomad_micron_wasm_use:
+ this.nomadMicronWasmFeatureEffective && this.nomadMicronWasmReady === true && engineWasm,
};
},
/**
@@ -726,7 +734,9 @@ export default {
micronGoRelease,
};
}
- const wasmPreferred = this.nomadMicronWasmFeatureEffective;
+ const wasmPreferred =
+ this.nomadMicronWasmFeatureEffective &&
+ (GlobalState.config?.nomad_micron_default_engine || "js") === "wasm";
if (wasmPreferred && !this.nomadMicronWasmReady) {
return {
label: this.$t("nomadnet.renderer_chip_micron_js"),
@@ -903,6 +913,19 @@ export default {
}
);
+ this.$watch(
+ () => GlobalState.config?.nomad_micron_default_engine,
+ () => {
+ if (this.nodePageContent && this.nodePagePath && this.nodePagePath.toLowerCase().endsWith(".mu")) {
+ const content = this.nodePageContent;
+ this.nodePageContent = null;
+ this.$nextTick(() => {
+ this.nodePageContent = content;
+ });
+ }
+ }
+ );
+
if (isMicronWasmBundled() && GlobalState.config?.nomad_micron_wasm_enabled === true) {
preloadNomadMicronWasm().then((ok) => {
this.nomadMicronWasmReady = ok === true;
@@ -973,23 +996,20 @@ export default {
}
return content.startsWith("Failed loading page:");
},
- async toggleMicronWasm() {
+ async applyNomadMicronDefaultEngine(engine) {
if (!isMicronWasmBundled()) {
return;
}
- await this.applyNomadMicronWasmEnabled(!GlobalState.config.nomad_micron_wasm_enabled);
- },
- async applyNomadMicronWasmEnabled(useWasm) {
- if (!isMicronWasmBundled()) {
+ if (!GlobalState.config?.nomad_micron_wasm_enabled) {
return;
}
- const newValue = Boolean(useWasm);
- if (Boolean(GlobalState.config?.nomad_micron_wasm_enabled) === newValue) {
+ const next = engine === "wasm" ? "wasm" : "js";
+ if ((GlobalState.config?.nomad_micron_default_engine || "js") === next) {
return;
}
try {
- const next = await patchServerConfig({ nomad_micron_wasm_enabled: newValue }, window.api);
- mergeGlobalConfig(next);
+ const cfg = await patchServerConfig({ nomad_micron_default_engine: next }, window.api);
+ mergeGlobalConfig(cfg);
if (this.nodePageContent && this.nodePagePath && this.nodePagePath.toLowerCase().endsWith(".mu")) {
const content = this.nodePageContent;
this.nodePageContent = null;
@@ -998,7 +1018,7 @@ export default {
});
}
} catch (e) {
- console.error("Failed to update Micron WASM preference", e);
+ console.error("Failed to update Micron default engine", e);
ToastUtils.error(this.$t("nomadnet.renderer_setting_failed"));
}
},

diff --git a/meshchatx/src/frontend/components/settings/SettingsPage.vue b/meshchatx/src/frontend/components/settings/SettingsPage.vue
index 4143f627..3b8fa7d5 100644
--- a/meshchatx/src/frontend/components/settings/SettingsPage.vue
+++ b/meshchatx/src/frontend/components/settings/SettingsPage.vue
@@ -901,6 +901,29 @@
</span>
</span>
</label>
+ <div
+ v-if="micronWasmBundledInBuild && config.nomad_micron_wasm_enabled"
+ class="space-y-2 rounded-lg border border-gray-200 bg-gray-50/80 p-3 dark:border-zinc-700 dark:bg-zinc-900/50"
+ >
+ <div class="text-sm font-medium text-gray-900 dark:text-gray-100">
+ {{ $t("settings.nomad_micron_default_engine_title") }}
+ </div>
+ <p class="text-xs text-gray-600 dark:text-gray-400">
+ {{ $t("settings.nomad_micron_default_engine_desc") }}
+ </p>
+ <select
+ :value="config.nomad_micron_default_engine === 'wasm' ? 'wasm' : 'js'"
+ class="input-field max-w-xl"
+ @change="onNomadMicronDefaultEngineSelect($event)"
+ >
+ <option value="js">
+ {{ $t("settings.nomad_micron_default_engine_option_js") }}
+ </option>
+ <option value="wasm">
+ {{ $t("settings.nomad_micron_default_engine_option_wasm") }}
+ </option>
+ </select>
+ </div>
<div v-if="micronWasmBundledInBuild" class="mt-2">
<button
type="button"
@@ -2619,7 +2642,8 @@ export default {
nomad_render_markdown_enabled: true,
nomad_render_html_enabled: true,
nomad_render_plaintext_enabled: true,
- nomad_micron_wasm_enabled: false,
+ nomad_micron_wasm_enabled: true,
+ nomad_micron_default_engine: "js",
nomad_default_page_path: "/page/index.mu",
local_message_auto_delete_enabled: false,
local_message_auto_delete_value: 30,
@@ -2773,6 +2797,8 @@ export default {
"index.mu",
"index.html",
"default page",
+ "settings.nomad_micron_default_engine_title",
+ "settings.nomad_micron_default_engine_desc",
],
crawler: ["Discovery", "Smart Crawler", "crawler", "crawl", "retries", "delay", "concurrent"],
csp: [
@@ -3605,6 +3631,23 @@ export default {
console.log(e);
}
},
+ async onNomadMicronDefaultEngineSelect(ev) {
+ const v = ev.target.value === "wasm" ? "wasm" : "js";
+ const prev = this.config.nomad_micron_default_engine === "wasm" ? "wasm" : "js";
+ if (v === prev) {
+ return;
+ }
+ try {
+ const newConfig = await patchServerConfig({ nomad_micron_default_engine: v }, window.api);
+ this.config = newConfig;
+ normalizeConfigColors(this.config);
+ this.syncLxmfTransferLimitInputs();
+ } catch (e) {
+ ev.target.value = prev;
+ ToastUtils.error(this.$t("common.save_failed"));
+ console.log(e);
+ }
+ },
onMicronWasmOverrideSaved() {},
async onNomadDefaultPagePathChange() {
await this.updateConfig(

diff --git a/meshchatx/src/frontend/js/GlobalState.js b/meshchatx/src/frontend/js/GlobalState.js
index ee562ef5..4be3a500 100644
--- a/meshchatx/src/frontend/js/GlobalState.js
+++ b/meshchatx/src/frontend/js/GlobalState.js
@@ -24,7 +24,8 @@ const globalState = reactive({
nomad_render_markdown_enabled: true,
nomad_render_html_enabled: true,
nomad_render_plaintext_enabled: true,
- nomad_micron_wasm_enabled: false,
+ nomad_micron_wasm_enabled: true,
+ nomad_micron_default_engine: "js",
nomad_default_page_path: "/page/index.mu",
ui_transparency: 0,
ui_glass_enabled: true,

diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 97b26c86..9dd29f46 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -2571,6 +2571,10 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": ") für Nomad Network-Seiten. Wenn ausgeschaltet oder nicht unterstützt, wird die Standardversion verwendet.",
+ "nomad_micron_default_engine_title": "Standard-Micron-Renderer (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript ist die Voreinstellung. WebAssembly nutzt micron-parser-go, wenn die obige Option aktiv ist und das Modul geladen wurde.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "WASM-Engine aktualisieren…",
"micron_wasm_update_modal_title": "Micron-WASM-Engine",
"micron_wasm_update_active_label": "Aktive Überschreibung",

diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index 261d1d6f..7ea06503 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -1348,7 +1348,11 @@
"nomad_micron_wasm_title": "Micron (WASM)",
"nomad_micron_wasm_desc_before_link": "Use a faster engine (",
"nomad_micron_wasm_link_label": "micron-parser-go",
- "nomad_micron_wasm_desc_after_link": ") for Nomad Network pages. If turned off or unsupported, it falls back to the standard version.",
+ "nomad_micron_wasm_desc_after_link": "). When on, the WebAssembly build can load and be updated in settings. When off, Micron uses JavaScript only. Pick the default renderer below; you can still switch from the Nomad browser toolbar.",
+ "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "Update WASM engine…",
"micron_wasm_update_modal_title": "Micron WASM engine",
"micron_wasm_update_active_label": "Active override",

diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 74a64738..0c12a2eb 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -1349,6 +1349,10 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only.",
+ "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "Actualizar motor WASM…",
"micron_wasm_update_modal_title": "Motor Micron WASM",
"micron_wasm_update_active_label": "Anulación activa",

diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index 5ac7add5..cf76406c 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -1349,6 +1349,10 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only.",
+ "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "Mettre à jour le moteur WASM…",
"micron_wasm_update_modal_title": "Moteur Micron WASM",
"micron_wasm_update_active_label": "Remplacement actif",

diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 1b2bdfed..de3e9041 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -1401,6 +1401,10 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": ") per le pagine Nomad Network. Se disattivata o non supportata, viene usata la versione standard.",
+ "nomad_micron_default_engine_title": "Motore Micron predefinito (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript è il predefinito. WebAssembly usa micron-parser-go quando il motore sopra è attivo e il modulo è caricato.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "Aggiorna motore WASM…",
"micron_wasm_update_modal_title": "Motore Micron WASM",
"micron_wasm_update_active_label": "Sostituzione attiva",

diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index c6e70b8d..9ce2b7ec 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -1349,6 +1349,10 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": ") voor Nomad Network-pagina's. Als dit is uitgeschakeld of niet wordt ondersteund, wordt de standaardversie gebruikt.",
+ "nomad_micron_default_engine_title": "Standaard Micron-renderer (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript is de standaard. WebAssembly gebruikt micron-parser-go wanneer de engine hierboven aan staat en de module geladen is.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "WASM-engine bijwerken…",
"micron_wasm_update_modal_title": "Micron WASM-engine",
"micron_wasm_update_active_label": "Actieve overschrijving",

diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 4e4c7d07..d1c72b3e 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -2571,6 +2571,10 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": ") для страниц Nomad Network. Если выключено или не поддерживается, используется стандартная версия.",
+ "nomad_micron_default_engine_title": "Рендерер Micron по умолчанию (.mu)",
+ "nomad_micron_default_engine_desc": "По умолчанию используется JavaScript. WebAssembly (micron-parser-go) — если включён движок выше и модуль загружен.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "Обновить движок WASM…",
"micron_wasm_update_modal_title": "Движок Micron WASM",
"micron_wasm_update_active_label": "Активное переопределение",

diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index 219fb3e4..b704e623 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -1349,6 +1349,10 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only.",
+ "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
+ "nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "更新 WASM 引擎…",
"micron_wasm_update_modal_title": "Micron WASM 引擎",
"micron_wasm_update_active_label": "当前覆盖",

diff --git a/tests/frontend/fixtures/settingsPageTestApi.js b/tests/frontend/fixtures/settingsPageTestApi.js
index bdcab7ca..d27f42ba 100644
--- a/tests/frontend/fixtures/settingsPageTestApi.js
+++ b/tests/frontend/fixtures/settingsPageTestApi.js
@@ -123,7 +123,8 @@ export function buildFullServerConfig(overrides = {}) {
nomad_render_markdown_enabled: true,
nomad_render_html_enabled: true,
nomad_render_plaintext_enabled: true,
- nomad_micron_wasm_enabled: false,
+ nomad_micron_wasm_enabled: true,
+ nomad_micron_default_engine: "js",
nomad_default_page_path: "/page/index.mu",
gitea_base_url: "https://git.quad4.io",
...overrides,


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────